%!TEX program = xelatex
\documentclass[lang=cn,11pt,a4paper,bibtex, citestyle = authoryear]{elegantpaper}

% 标题区域
\title{Julia Set的探索与分析}
\author{强基数学2001 \\ 关博仁 3200102452}
\date{\zhtoday}

% 本文档命令
\usepackage{array,url,subfigure,stfloats,tikz}
\usetikzlibrary{positioning, shapes.geometric, calc}
\usepackage[lined,boxed,commentsnumbered]{algorithm2e}
\newcommand{\ccr}[1]{\makecell{{\color{#1}\rule{1cm}{1cm}}}}
\newcommand{\code}[1]{\lstinline{#1}}

% 文档区
\begin{document}

% 建立标题
\maketitle

% 摘要
\begin{abstract}
本文为浙江大学2021-2022短学期王何宇老师的《数学软件》课程项目作业，在前面的课程当中，我们已经介绍过了Mandelbrot set(以下简称M-S，详细内容请参见仓库\href{https://gitee.com/wellsguan/mathematics-software/tree/master/Day4}{Day4})，本文中我们将会详细介绍与M-S密切相关的Julia set(以下简称J-S)并介绍相关的科学计算可视化工具和本文中用到的代码与相关技术，源代码可见仓库\href{https://gitee.com/wellsguan/mathematics-software/tree/master/Project}{Project}
\keywords{Julia集, Mandelbrot集, Plotly, Python, 逃逸时间算法, Jit优化}
\end{abstract}

% 引言
\section{引言}

承接前文，我们在本文中将研究Julia Set，同样作为分形几何与复动力系统的经典案例，它从定义开始就与Mandelbrot Set紧密相关，想要初步了解J-S可以移步[\cite{JCPC}]。本文将围绕J-S展开关于其性质的一系列讨论并给出相关证明，也会介绍相关的可视化实现的算法与工具，最后给出一些优美的计算示例。

% 问题背景
\section{问题背景}

% 定义
\subsection{Julia集的定义}


让我们先回顾一下Mandelbrot Set，它是由下列式子定义的一个复数集:
\[
    \mathcal{M}=\{c\in\mathbb{C}|f(z)=z^2+c,\quad\lim\limits_{n\to\infty} f^n(0)<\infty\}
\]
对于任意的$c$，我们已经考虑了$f^n(x)$在$0$处的性质，为此我们自然地想要研究对于给定的$c$，$f^n(x)$在$\mathbb{C}$上的性质，为此自然的给出J-S的定义:
\[
    \mathcal{J}_c=\{z\in\mathbb{C}|f(z)=z^2+c,\quad\lim\limits_{n\to\infty} f^n(z)<\infty\}
\]
容易看出对于M-S中的点$c$，其对应的$J_c$一定包含0。

% 算法简介
\subsection{可视化算法}

之前在介绍M-S时，我们已经介绍过了逃逸时间算法，本文中我们将继续应用它，先回顾一下，有如下伪代码:
\newpage
% 伪代码区
\begin{algorithm}
\caption{逃逸时间算法}\label{algorithm}
\KwIn{迭代函数$f$, 逃逸极限时间$N$, 逃逸半径极限$r$, 待检验集合$S$}
\KwOut{迭代次数映射$m$}
\KwData{}
\For{$x$ in $S$}{
    \For{$i$ in $1:N$}{
        $z = f(z)$\;
        \If{$|z|>r$}{$m(x)=i$\;对下一元素进行迭代\;}
    }
    $m(x)=N$
}
\end{algorithm}

它的高效性在[\cite{zhang2009}]有所说明，若有兴趣可自行前往浏览。

根据上述伪代码可给出如下流程图:

% 流程图居中
\begin{center}
    \begin{tikzpicture}[node distance=10pt]
            \node[draw, rounded corners]      (start)  {初始化待检验序列$F$, 设置$r,N,i=1$};
            \node[draw, below=of start]       (step 1) {设置count = 0};
            \node[draw, below=of step 1]      (iter)   {对$F_i$进行迭代,count=count+1};
            \node[draw, below=of iter]        (choice) {判断此时是否有$|F_i|>r$或count=$N$};
            \node[draw, below=20pt of choice] (iterend){记录对应的count};
            \node[draw, below=of iterend]     (judge)  {判断是否遍历待检验序列};
            \node[draw, below=20pt of judge]  (end)    {输出逃逸时间序列};
            \node[draw, left=40pt of judge]   (ipp)    {i=i+1};
            \node[draw, below=of end]         (vlize)  {可视化图像};

            \draw[->,>=stealth] (start)->(step 1);
            \draw[->,>=stealth] (step 1)->(iter);
            \draw[->,>=stealth] (iter)->(choice);
            \draw[->,>=stealth] (choice)->node[left]{Yes}(iterend);
            \draw[->,>=stealth] (choice)->($(choice)+(4,0)$)->node[left]{No}($(iter)+(4,0)$)->(iter);
            \draw[->,>=stealth] (iterend)->(judge);
            \draw[->,>=stealth] (judge)->node[left]{Yes}(end);
            \draw[->,>=stealth] (judge)->node[above]{No}(ipp);
            \draw[->,>=stealth] (ipp)->(ipp|-iter)->(iter);
            \draw[->,>=stealth] (end)->(vlize);
            \end{tikzpicture}
\end{center}
该流程能够近似完成J-S的可视化，正确性将在下文给出。

% 数学理论
\section{Julia集的性质}

\subsection{基本性质与收敛性判断}

我们已经在之前介绍过以下定理:

\textbf{定理.1}\ 对于$f(z)=z^2+c$，$\lim\limits_{n\to\infty} f^n(0)<\infty$收敛等价于$\forall n\in\mathbb{N}, |f^n(z)|<=2$.

证明请参见我的仓库\href{https://gitee.com/wellsguan/mathematics-software/tree/master/Day4}{Day4}，很容易知道，我们仍然可以凭借它说明$2$是一个逃逸极限半径$r$，对于前文给定的流程图来说，此定理已经足够说明其正确性，此外也容易知道有如下结论:

\textbf{结论.1}\ Julia集的图像关于0对称。

\textbf{证明.}\ 对$z,-z$来说，$f(z)=f(-z)$，因此它们的迭代数列收敛性相同。

我们可以简单的凭借它预测可视化结果。

\subsection{与Mandelbrot集的联系}

关于J-S与M-S有如下的强大又漂亮的定理:

\textbf{定理.2}定义
\[\{c\in\mathbb{C}|\mathcal{J}_c\text{连通}\}\]与\[\{c\in\mathbb{C}|f(z)=z^2+c,\quad\lim\limits_{n\to\infty} f^n(0)<\infty\}\]等价，因此我们可以知道对于M-S中的$c$，其定义的$J_c$只有一个连续的部分，而对$c\notin\mathcal{M}$，其定义的$J_c$是有连通分支的。

定理的证明可参考[\cite{proof}]。

% 实验设计
\section{实验设计}

\subsection{实验过程--代码实现}
本次实验仍然使用\code{Python}作为主要语言完成，不同的是增加了利用\code{Jit}进行代码优化，函数接口更改为如下格式: 
\begin{lstlisting}
    Julia():
        global center,radius,n,const
\end{lstlisting}
为此可实现固定中心点的缩放。

\subsection{实验思路}
通过选取如下几个点生成图片可视化，来验证定理2:
\begin{lstlisting}
## 在M-S内部
-1.0+0.26j -0.1+0.78j 0.25+0j
## 在M-S外部
-0.76+0.2j -0.08+1.0j 0.35+0j 
\end{lstlisting}
得到在M-S内部的输出:

\begin{figure}[htbp]
    \centering
    \subfigure[-1.0+0.26i]{\includegraphics[width=0.28\textwidth]{../png/c_(-1+0.26j)_1.png}}
    \subfigure[-0.1+0.78i]{\includegraphics[width=0.28\textwidth]{../png/c_(-0.1+0.78j)_1.png}}
    \subfigure[0.25+0i]{\includegraphics[width=0.28\textwidth]{../png/c_(0.25+0j)_1.png}}
\end{figure}
\newpage
在M-S外部的输出:
\begin{figure}[htbp]
    \centering
    \subfigure[-0.76+0.2j]{\includegraphics[width=0.28\textwidth]{../png/c_(-0.76+0.2j)_1.png}}
    \subfigure[-0.08+1.0j]{\includegraphics[width=0.28\textwidth]{../png/c_(-0.08+1j)_1.png}}
    \subfigure[0.35+0j]{\includegraphics[width=0.28\textwidth]{../png/c_(0.35+0j)_1.png}}
\end{figure}

可见与定理2结论相吻合，在一定程度上说明了算法的正确性。

\section{经典样例}

下面是几个经典样例，命名参考[\cite{note}]:

\begin{figure}[htbp]
    \centering
    \subfigure[Basilica, -1+0i]{\includegraphics[width=0.49\textwidth]{../png/c_(-1+0j)_1.png}}
    \subfigure[Douady rabbit, -0.123+0.754i]{\includegraphics[width=0.49\textwidth]{../png/c_(-0.123+0.754j)_1.png}}
\end{figure}

另外还有一个图像，没有找到具体的命名，但是因为其美观我也特别的放在这里展示:

\begin{figure}[htbp]
    \centering
    \subfigure[0.37+0.16i]{\includegraphics[width=\textwidth]{../png/c_(0.37+0.16j)_1.png}}
\end{figure}
\newpage

这些美妙的样例从一定程度上反映了前面理论知识的正确性，关于更多的样例，我将会在本文相配套的PPT中进行展示。（请参见仓库\href{https://gitee.com/wellsguan/mathematics-software/tree/master/Project}{Project}）

% 结论区
\section{结论}

本次试验基本上是对之前对于M-S科学计算可视化的扩充，相比之下提高了代码效率以便我们生成更多细节的样例，是一次良好的提升。

% 参考文献区
\nocite{*}
\printbibliography[heading=bibintoc, title=\ebibname]
\newpage

\end{document}
